home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / net / protocol.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.6 KB  |  111 lines

  1. /*
  2.  * INET        An implementation of the TCP/IP protocol suite for the LINUX
  3.  *        operating system.  INET is implemented using the  BSD Socket
  4.  *        interface as the means of communication with the user level.
  5.  *
  6.  *        Definitions for the protocol dispatcher.
  7.  *
  8.  * Version:    @(#)protocol.h    1.0.2    05/07/93
  9.  *
  10.  * Author:    Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  11.  *
  12.  *        This program is free software; you can redistribute it and/or
  13.  *        modify it under the terms of the GNU General Public License
  14.  *        as published by the Free Software Foundation; either version
  15.  *        2 of the License, or (at your option) any later version.
  16.  *
  17.  *    Changes:
  18.  *        Alan Cox    :    Added a name field and a frag handler
  19.  *                    field for later.
  20.  *        Alan Cox    :    Cleaned up, and sorted types.
  21.  *        Pedro Roque    :    inet6 protocols
  22.  */
  23.  
  24. #ifndef _PROTOCOL_H
  25. #define _PROTOCOL_H
  26.  
  27. #include <linux/in6.h>
  28. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  29. #include <linux/ipv6.h>
  30. #endif
  31.  
  32. #define MAX_INET_PROTOS    256        /* Must be a power of 2        */
  33.  
  34.  
  35. /* This is used to register protocols. */
  36. struct net_protocol {
  37.     int            (*handler)(struct sk_buff *skb);
  38.     void            (*err_handler)(struct sk_buff *skb, u32 info);
  39.     int            (*gso_send_check)(struct sk_buff *skb);
  40.     struct sk_buff           *(*gso_segment)(struct sk_buff *skb,
  41.                            int features);
  42.     unsigned int        no_policy:1,
  43.                 netns_ok:1;
  44. };
  45.  
  46. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  47. struct inet6_protocol 
  48. {
  49.     int    (*handler)(struct sk_buff *skb);
  50.  
  51.     void    (*err_handler)(struct sk_buff *skb,
  52.                    struct inet6_skb_parm *opt,
  53.                    int type, int code, int offset,
  54.                    __be32 info);
  55.  
  56.     int    (*gso_send_check)(struct sk_buff *skb);
  57.     struct sk_buff *(*gso_segment)(struct sk_buff *skb,
  58.                        int features);
  59.  
  60.     unsigned int    flags;    /* INET6_PROTO_xxx */
  61. };
  62.  
  63. #define INET6_PROTO_NOPOLICY    0x1
  64. #define INET6_PROTO_FINAL    0x2
  65. /* This should be set for any extension header which is compatible with GSO. */
  66. #define INET6_PROTO_GSO_EXTHDR    0x4
  67. #endif
  68.  
  69. /* This is used to register socket interfaces for IP protocols.  */
  70. struct inet_protosw {
  71.     struct list_head list;
  72.  
  73.         /* These two fields form the lookup key.  */
  74.     unsigned short     type;       /* This is the 2nd argument to socket(2). */
  75.     unsigned short     protocol; /* This is the L4 protocol number.  */
  76.  
  77.     struct proto     *prot;
  78.     const struct proto_ops *ops;
  79.   
  80.     int              capability; /* Which (if any) capability do
  81.                       * we need to use this socket
  82.                       * interface?
  83.                                       */
  84.     char             no_check;   /* checksum on rcv/xmit/none? */
  85.     unsigned char     flags;      /* See INET_PROTOSW_* below.  */
  86. };
  87. #define INET_PROTOSW_REUSE 0x01         /* Are ports automatically reusable? */
  88. #define INET_PROTOSW_PERMANENT 0x02  /* Permanent protocols are unremovable. */
  89. #define INET_PROTOSW_ICSK      0x04  /* Is this an inet_connection_sock? */
  90.  
  91. extern struct net_protocol *inet_protocol_base;
  92. extern struct net_protocol *inet_protos[MAX_INET_PROTOS];
  93.  
  94. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  95. extern struct inet6_protocol *inet6_protos[MAX_INET_PROTOS];
  96. #endif
  97.  
  98. extern int    inet_add_protocol(struct net_protocol *prot, unsigned char num);
  99. extern int    inet_del_protocol(struct net_protocol *prot, unsigned char num);
  100. extern void    inet_register_protosw(struct inet_protosw *p);
  101. extern void    inet_unregister_protosw(struct inet_protosw *p);
  102.  
  103. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  104. extern int    inet6_add_protocol(struct inet6_protocol *prot, unsigned char num);
  105. extern int    inet6_del_protocol(struct inet6_protocol *prot, unsigned char num);
  106. extern int    inet6_register_protosw(struct inet_protosw *p);
  107. extern void    inet6_unregister_protosw(struct inet_protosw *p);
  108. #endif
  109.  
  110. #endif    /* _PROTOCOL_H */
  111.